package com.stars.system.reim.service;

import com.stars.system.reim.domain.ReimDailyOverdue;
import com.stars.system.reim.domain.ReimDailyRecord;
import com.stars.system.reim.domain.ReimDailyRecordVO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 报销记录（个人）Service接口
 * 
 * @author shuaibizhe
 * @date 2022-11-14
 */
public interface IReimDailyRecordService
{
    /**
     * 查询报销记录（个人）
     * 
     * @param reimId 报销记录（个人）主键
     * @return 报销记录（个人）
     */
    public ReimDailyRecord selectReimDailyRecordByReimId(String reimId);

    /**
     * 查询报销记录（个人）列表
     * 
     * @param reimRecord 报销记录（个人）
     * @return 报销记录（个人）集合
     */
    public List<ReimDailyRecord> selectReimDailyRecordList(ReimDailyRecord reimRecord);

    /**
     * 查询报销记录列表
     *
     * @param reimRecord 报销记录（部门）
     * @param deptId 部门
     * @return 报销记录（部门）集合
     */
    public List<ReimDailyRecord> selectReimRecordListByDept(ReimDailyRecord reimRecord, Long deptId);

    /**
     * 新增报销记录（个人）
     * 
     * @param reimRecord 报销记录（个人）
     * @return 结果
     */
    public int insertReimDailyRecord(ReimDailyRecord reimRecord);

    /**
     * 修改报销记录（个人）
     * 
     * @param reimRecord 报销记录（个人）
     * @return 结果
     */
    public int updateReimDailyRecord(ReimDailyRecord reimRecord);

    /**
     * 批量删除报销记录（个人）
     * 
     * @param reimIds 需要删除的报销记录（个人）主键集合
     * @return 结果
     */
    public int deleteReimDailyRecordByReimIds(String[] reimIds);

    /**
     * 删除报销记录（个人）信息
     * 
     * @param reimId 报销记录（个人）主键
     * @return 结果
     */
    public int deleteReimRecordByReimId(String reimId);

    /**
     * 统计前确认数据
     *
     * @param reimIds 报销记录（个人）主键
     * @return 结果
     */
    public boolean confirmDailyBeforeStat(String[] reimIds, int cycle);

    /**
     * 统计数据
     *
     * @param reimIds 报销记录（个人）主键
     * @return 结果
     */
    public List statReimDailyRecord(String[] reimIds);

    /**
     * 生成支付记录word文档
     * @param reimIds
     * @param response
     * @param request
     * @throws Exception
     */
    public void exportReimDailyRecordImgs(String[] reimIds, HttpServletResponse response, HttpServletRequest request) throws Exception;

    /**
     * 生成报销封面excel
     * @param reimIds
     * @param response
     * @param request
     * @throws Exception
     */
    public void exportReimDailyRecordCover(String[] reimIds, HttpServletResponse response, HttpServletRequest request) throws Exception;

    /**
     * 将数据标记为报销完成
     *
     * @param reimIds 报销记录（个人）主键
     * @return 结果
     */
    public int completeReimDailyRecord(String[] reimIds);

    /**
     * 查询逾期记录数量
     *
     * @param cycle 逾期周期
     * @return 结果
     */
    public List<ReimDailyOverdue> countDailyOverdueRecords(int cycle);

    /**
     * 根据年月进行记录聚合，用于统计每月报销情况
     * @return
     */
    public List<ReimDailyRecordVO> buildRecordsByMonthGroup(List<ReimDailyRecord> records);
}
